﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.Data.SQLite;
using System.Security.Cryptography;
using System.IO;
using System.Drawing;
using System.Drawing.Printing;
using System.Xml;

//для работы с почтой
using System.Net;
using System.Net.Mail;

/*
 *  <connectionStrings>
    <add name="PDATA" connectionString="Data Source=\\server\share;Initial Catalog=mydatabase;Integrated Security=True"/>
    </connectionStrings>
 *  Замените \\server\share на путь к общей папке, где находится база данных.
 */



namespace ProductDB
{
    
    public partial class Form1 : Form
    {
        //private SqlConnection sqlConnection;
        private SQLiteConnection sqliteConnection;

        public_method pm = new public_method();

        public Form1()
        {
            InitializeComponent();
            string connectionString = ConfigurationManager.ConnectionStrings["PDATA"].ConnectionString;
            //sqlConnection = new SqlConnection(connectionString);
            //sqlConnection.Open();
            sqliteConnection = new SQLiteConnection(connectionString);
            sqliteConnection.Open();
        }

        private void button2_Click(object sender, EventArgs e)
        {
            Close();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            textBox1.Text = XmlHelper.GetConfig();
        }

        private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            registration reg = new registration();
            reg.ShowDialog();
        }

        private void EnterToBD()
        {
            string passDB = "";
            using (SQLiteConnection connection = new SQLiteConnection(sqliteConnection.ConnectionString))
            {
                connection.Open();
                if (!(textBox1.Text == "") && pm.EmailExists(textBox1.Text.ToLower().Trim(), connection))
                {
                    passDB = pm.GetPassword(textBox1.Text.ToLower().Trim(), connection);
                    if (!(textBox2.Text == "") && pm.StringToSHA512(textBox2.Text.Trim(), textBox1.Text.ToLower().Trim()) == passDB)
                    {
                        if ((pm.GetRole(textBox1.Text.ToLower().Trim(), connection) == 1) ||
                            (pm.GetRole(textBox1.Text.ToLower().Trim(), connection) == 2))
                        {
                            AddBD addDB = new AddBD(textBox1.Text.ToLower().Trim());
                            addDB.Show();
                            this.Hide();
                        }
                        else if (pm.GetRole(textBox1.Text.ToLower().Trim(), connection) == 3)
                        {
                            BDViewsDG viewsDG = new BDViewsDG(textBox1.Text.ToLower().Trim());
                            viewsDG.Show();
                            this.Hide();
                        }
                    }
                    else
                    {
                        MessageBox.Show("Пароль не верен");
                    }
                }
                else
                {
                    MessageBox.Show("Email не найден! Зарегистрируйтесь или обратитесь к администратору...");
                }
            }
        }


        /*
        private void button1_Click(object sender, EventArgs e)
        {
            string passDB = "";
            using (SqlConnection connection = new SqlConnection(sqlConnection.ConnectionString))
            {
                connection.Open();
                if (!(textBox1.Text == "") && pm.EmailExists(textBox1.Text.ToLower().Trim(), connection))
                {
                    passDB = pm.GetPassword(textBox1.Text.ToLower().Trim(), connection);
                    if (!(textBox2.Text == "") && pm.StringToSHA512(textBox2.Text.Trim(), textBox1.Text.ToLower().Trim()) == passDB)
                    {
                        if ((pm.GetRole(textBox1.Text.ToLower().Trim(), connection) == 1) ||
                            (pm.GetRole(textBox1.Text.ToLower().Trim(), connection) == 2))
                        {
                            AddBD addDB = new AddBD(textBox1.Text.ToLower().Trim());
                            addDB.Show();
                            this.Hide();
                        }
                        else if (pm.GetRole(textBox1.Text.ToLower().Trim(), connection) == 3)
                        {
                            BDViewsDG viewsDG = new BDViewsDG(textBox1.Text.ToLower().Trim());
                            viewsDG.Show();
                            this.Hide();
                        }
                    }
                    else
                    {
                        MessageBox.Show("Пароль не верен");
                    }
                }
                else
                {
                    MessageBox.Show("Email не найден! Зарегистрируйтесь или обратитесь к администратору...");
                }
            }
        }*/
        private void button1_Click(object sender, EventArgs e)
        {
            XmlHelper.SaveConfig(textBox1.Text);
            EnterToBD();
        }

        private void textBox2_KeyDown(object sender, KeyEventArgs e)
        {
            if(e.KeyCode == Keys.Enter)
            {
                XmlHelper.SaveConfig(textBox1.Text);
                EnterToBD();
            }
        }



        public class XmlHelper
        {
            private static readonly string ConfigFolder = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "ProductDB");
            private static readonly string ConfigFilePath = Path.Combine(ConfigFolder, "config_user.xml");

            public static void SaveConfig(string value)
            {
                try
                {
                    if (!Directory.Exists(ConfigFolder))
                    {
                        Directory.CreateDirectory(ConfigFolder);
                    }

                    if (File.Exists(ConfigFilePath))
                    {
                        File.Delete(ConfigFilePath);
                    }

                    XmlDocument xmlDoc = new XmlDocument();
                    xmlDoc.LoadXml("<config_user value=\"" + value + "\"/>");

                    xmlDoc.Save(ConfigFilePath);
                }
                catch (Exception ex)
                {
                    // Обрабатываем ошибку при записи в файл
                    Console.WriteLine("Ошибка записи в файл: " + ex.Message);
                }
            }

            public static string GetConfig()
            {
                try
                {
                    if (!Directory.Exists(ConfigFolder))
                    {
                        Directory.CreateDirectory(ConfigFolder);
                    }

                    if (!File.Exists(ConfigFilePath))
                    {
                        return string.Empty;
                    }

                    XmlDocument xmlDoc = new XmlDocument();
                    xmlDoc.Load(ConfigFilePath);

                    // Если файл не пустой, возвращаем значение
                    if (xmlDoc.DocumentElement != null && xmlDoc.DocumentElement.Attributes["value"] != null)
                    {
                        return xmlDoc.DocumentElement.Attributes["value"].Value;
                    }
                    else
                    {
                        return string.Empty;
                    }
                }
                catch (Exception ex)
                {
                    // Обрабатываем ошибку при чтении из файла
                    Console.WriteLine("Ошибка чтения из файла: " + ex.Message);
                    return string.Empty;
                }
            }
        }


    }
}
